package desmontec.documentos

import desmontec.validacoes.guia.*;

class GuiaDeTrafegoService {

    static transactional = true

    def validarMateriaisDaGuia(ValidarQuantidadesDaGuia guia, GuiaDeTrafego guiaTrafego) {
		
		def qntDinamite = guia.dinamite
		def qntDetonante = guia.cordelDet
		def qntEspoleta = guia.espoleta
		def qntEstopim = guia.estopim
		def qntEspoletim = guia.espoletim
		def qntRetardo = guia.retardo
		def mapas = MapaEstocagem.findAllByDpg(guiaTrafego.mapaDeEstocagem.dpg)
		for (m in mapas) {
			def guias = GuiaDeTrafego.findAllByMapaDeEstocagemAndIdNotEqual(m, guiaTrafego.id)
			for (g in guias){
				qntDinamite += g.dinamite
				qntDetonante += g.cordelDet
				qntEspoleta += g.espoleta
				qntEstopim += g.estopim
				qntEspoletim += g.espoletim
				qntRetardo += g.retardo
			}
		}
		def qntMaxima = new QuantidadeMaximaDeMateriais()
		qntMaxima = guiaTrafego.mapaDeEstocagem.dpg.materiais
		
		if (qntDinamite > qntMaxima.dinamite){
			return false
		} else if (qntEspoleta > qntMaxima.espoleta){
			return false
		} else if (qntEstopim > qntMaxima.estopim){
			return false
		} else if (qntDetonante > qntMaxima.cordelDet){
			return false
		} else if (qntEspoletim > qntMaxima.espoletim){
			return false
		} else if (qntRetardo > qntMaxima.retardo){
			return false
		}
		return true
		
	}
	
	def validarMateriaisDaGuia2(GuiaDeTrafego guiaAtual, List<GuiaDeTrafego> outrasGuias, DPG dpgAtual) {

				
		def qntDinamite = guiaAtual.dinamite
		def qntDetonante = guiaAtual.cordelDet
		def qntEspoleta = guiaAtual.espoleta
		def qntEstopim = guiaAtual.estopim
		def qntEspoletim = guiaAtual.espoletim
		def qntRetardo = guiaAtual.retardo
		
		for (g in outrasGuias){
			qntDinamite += g.dinamite
			qntDetonante += g.cordelDet
			qntEspoleta += g.espoleta
			qntEstopim += g.estopim
			qntEspoletim += g.espoletim
			qntRetardo += g.retardo
		}

				
		def mapas = MapaEstocagem.findAllByDpg(dpgAtual)
			
		for (m in mapas){
			def guiasSalvas = GuiaDeTrafego.findAllByMapaDeEstocagem(m)
			def guias = GuiaDeTrafego.findAllByMapaDeEstocagemAndNumeroDaGuiaNotEqual(m, guiaAtual.numeroDaGuia)
			for (g in guiasSalvas){
				qntDinamite += g.dinamite
				qntDetonante += g.cordelDet
				qntEspoleta += g.espoleta
				qntEstopim += g.estopim
				qntEspoletim += g.espoletim
				qntRetardo += g.retardo
			}
		}
		
		def qntMaxima = new QuantidadeMaximaDeMateriais()
		qntMaxima = dpgAtual.materiais
		
		if (qntDinamite > qntMaxima.dinamite){
			return false
		} else if (qntEspoleta > qntMaxima.espoleta){
			return false
		} else if (qntEstopim > qntMaxima.estopim){
			return false
		} else if (qntDetonante > qntMaxima.cordelDet){
			return false
		} else if (qntEspoletim > qntMaxima.espoletim){
			return false
		} else if (qntRetardo > qntMaxima.retardo){
			return false
		}
		return true
		
	}
	
	
	def addGuias (List<GuiaDeTrafego> listaGuiasDeTrafego, List<GuiaDeTrafego> listaGuiasDeTrafegoExistentes){
		
		System.out.println(listaGuiasDeTrafego);
		System.out.println(listaGuiasDeTrafegoExistentes);
		List<GuiaDeTrafego> listaAux = new ArrayList<GuiaDeTrafego>();
		for(guia in listaGuiasDeTrafegoExistentes){
			if(listaGuiasDeTrafego.isEmpty()){
				
				listaGuiasDeTrafego.add(guia);
			} else {
				boolean add = true;
				for (guiaLista in listaGuiasDeTrafego){
					if (guiaLista.id != null){
						if(guiaLista.id == guia.id){
							add = false;
							System.out.println(guia.id + " Ja existe e nao deve ser add novamente");
							break;
						}
					}
				}
				if (add){
					listaAux.add(guia);
				}
			}
		}
		if (!listaAux.isEmpty()){
			listaGuiasDeTrafego.addAll(listaAux);
		}
	}
}
